package io.github.talelin.latticy.service.oms;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import io.github.talelin.autoconfigure.exception.ForbiddenException;
import io.github.talelin.latticy.dto.oms.product.PrintBarcodeDTO;
import io.github.talelin.latticy.dto.oms.product.ProductDTO;
import io.github.talelin.latticy.dto.oms.product.ProductPage;
import io.github.talelin.latticy.model.oms.ProductDO;
import io.github.talelin.latticy.vo.FindResultVO;
import io.github.talelin.latticy.vo.PageResponseVO;
import io.github.talelin.latticy.vo.oms.ProductVO;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * @ClassName：ProductService
 * @Author: ljj
 * @Date: 2022/5/10 9:24
 */
public interface ProductService extends IService<ProductDO> {
    /**
     * 新增产品
     *
     * @param productDTO
     * @return
     */
    void add(ProductDTO productDTO);

    /**
     * 分查查询
     *
     * @param productPage
     * @return
     */
    IPage<ProductVO> pageList(ProductPage productPage);

    /**
     * 修改状态  --审核 --归档 --删除
     *
     * @param productDTO
     * @return
     */
    Integer updateStatus(ProductDTO productDTO);

    /**
     * 修改
     *
     * @param productDTO
     * @return
     */
    void update(ProductDTO productDTO);

    /**
     * 批量设置包材
     *
     * @param productDTO
     * @return
     */
    Integer batchSetPackagMaterial(ProductDTO productDTO);

    /**
     * 批量修改预警阈值
     *
     * @param productDTO
     * @return
     */
    Integer batchSetAlarmThreshold(ProductDTO productDTO);

    /**
     * 导出
     *
     * @param type
     */
    void export(Integer type,HttpServletResponse response) throws IOException;

    /**
     * 上传压缩包中的图片
     *
     * @param zipFile
     * @return
     */
    void uploadImageZip(MultipartFile zipFile) throws IOException;

    /**
     * 查询所有被审核的产品
     * @return
     */
    List<ProductDO> findAllByAudit();

    /**
     * 批量添加
     * @param productDTOS
     */
    void batchSave(List<ProductDTO> productDTOS);

    /**
     * 条形码
     * @param response
     * @param productDTO
     */
    void getBarCode(HttpServletResponse response, ProductDTO productDTO);

    /**
     * 条形码
     * @param response
     * @param printBarcodeDTO
     */
    void getBarCode(HttpServletResponse response, PrintBarcodeDTO printBarcodeDTO);

    /**
     * 删除产品(软)
     * @param ids
     */
    void softDelete(List<Long> ids);

    /**
     * 删除产品
     * @param ids
     */
    void delete(List<Long> ids);

    /**
     * 根据id查询
     * @param id
     * @return
     */
    ProductVO findById(Long id);

    /**
     * 预警库存
     * @return
     */
    FindResultVO findAlarmThreshold();

     List<ProductDO> getListBySkus(List<String> skus);

    int checkCountByProductIds(List<Long> productIds);
}
